﻿#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <linux/fb.h>
#include <linux/input.h>
#include <sys/ioctl.h>
#include "touch.h"


// 按下立即生效
void press(int *x, int *y)
{
	// 赋值非法值
	*x = -1;
	*y = -1;
	
	// 打开触摸屏
	int touch_fd = open(TOUCH_DEV, O_RDONLY);
	if(touch_fd < 0)
	{
		perror("open() touch screeen fail");
	}
	
	// 读取事件信息
	struct input_event buf;
	while(1)
	{
		bzero(&buf, sizeof(buf));
		
		// 读取输入设备数据
		read(touch_fd, &buf, sizeof(buf)); 
		
		// 判断是否触摸屏事件
		if(buf.type == EV_ABS)
		{
			if(buf.code == ABS_X)
				*x = buf.value;
			else if(buf.code == ABS_Y)
				*y = buf.value;
		}

		// 一旦不再是非法值，立即返回
		if(*x != -1 && *y != -1)
			break;
	}

	// 关闭文件
	close(touch_fd);
}


// 松开/释放生效
void release(int *x, int *y)
{
	// 打开触摸屏
	int touch_fd = open(TOUCH_DEV, O_RDONLY);
	if(touch_fd < 0)
	{
		perror("open() touch screeen fail");
	}
	
	// 读取事件信息
	struct input_event buf;
	while(1)
	{
		bzero(&buf, sizeof(buf));
		
		// 读取输入设备数据
		read(touch_fd, &buf, sizeof(buf)); 
		
		// 判断是否触摸屏事件
		if(buf.type == EV_ABS)
		{
			if(buf.code == ABS_X)
				*x = buf.value;
			else if(buf.code == ABS_Y)
				*y = buf.value;
		}
		

		// 判断是否按压事件
		if(buf.type == EV_KEY && buf.code == BTN_TOUCH)
		{
			if(buf.value == 0) // 默认为0
			{
				break;
			}		
		}
	}

	// 关闭文件
	close(touch_fd);
}

